package idv.jieh.commons.util;

/**
 * <p>Title: 藍色小惡魔的系統</p>
 *
 * <p>
 *    這個物件會將輸入的日期和時間解譯後，藉由相關的方法就可以取回資訊。<br>
 *    以方便程式設計者取得日期或時間資訊。
 * </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: BlueImp</p>
 *
 * @author Jieh
 * @version 1.0
 */

public class DateFormater {

  private String year;
  private String month;
  private String day;
  private String hour;
  private String minute;
  private String second;

  /**
   * 空的建構子。<p>
   */
  public DateFormater() {}

  /**
   * 格式化日期。<p>
   * 將傳入的三個參數，分別依照前後的順序，並將中間插入指定的分隔字元後傳回。<br>
   * 這三個參數可以傳入年月日或是時分秒。
   * @param s1 第一順位參數。可以傳入「年」或者「時」。
   * @param s2 第二順位參數。可以傳入「月」或者「分」。
   * @param s3 第三順位參數。可以傳入「日」或者「秒」
   * @param partition 分隔字元。
   * @return 格式化後的字串。
   */
  public String format(int s1, int s2, int s3, String partition) {
    StringBuffer r = new StringBuffer();

    java.text.DecimalFormat fmt = new java.text.DecimalFormat("00");
    r.append(fmt.format(s1)).append(partition);
    r.append(fmt.format(s2)).append(partition);
    r.append(fmt.format(s3));

    return r.toString();
  }

  /**
   * 設定日期。<p>
   * 請輸入一個含有年月日資訊且分隔字元需一致的字串。<br>
   * 當你輸入正確後，就可以呼叫 <u>getYear()</u>, <u>getMonth()</u>, <u>getDay()</u>，
   * 來分別取回年、月、日的資訊。
   * @param date 含有年月日資訊的字串。比方 2003/06/12
   * @param partition 分隔字元。以上述例子，分隔字將為 "/"
   * @throws NoSuchElementException 假如沒有足夠的元素可以設定的話。
   */
  public void setDate(String date, String partition) {
    java.util.StringTokenizer st = new java.util.StringTokenizer(date, partition);
    try {
      this.year = st.nextToken();
      this.month = st.nextToken();
      this.day = st.nextToken();
    } catch (java.util.NoSuchElementException ex) {
      throw this.formatException();
    }
  }

  /**
   * 設定時間。<p>
   * 請輸入一個含有時分秒資訊且分隔字元需一致的字串。<br>
   * 當你輸入正確後，就可以呼叫 <u>getHour()</u>, <u>getMinute()</u>, <u>getSecond()</u>，
   * 來分別取回時、分、秒的資訊。
   * @param time 含有時分秒資訊的字串。例如:23:04:00
   * @param partition 分隔字元。例如 ":"
   * @throws NoSuchElementException 假如沒有足夠的元素可以設定的話。
   */
  public void setTime(String time, String partition) {
    java.util.StringTokenizer st = new java.util.StringTokenizer(time, partition);
    try {
      this.hour = st.nextToken();
      this.minute = st.nextToken();
      this.second = st.nextToken();
    } catch (java.util.NoSuchElementException ex) {
      throw this.formatException();
    }
  }

  /** 取得年。<p>
   * 必須透過 <u>setDate()</u> 才能取到有意義的資訊。
   *  @return 年。
   */
  public String getYear() {
    return year;
  }

  /** 取得月。<p>
   * 必須透過 <u>setDate()</u> 才能取到有意義的資訊。
   *  @return 月。
   */
  public String getMonth() {
    return month;
  }

  /** 取得日。<p>
   * 必須透過 <u>setDate()</u> 才能取到有意義的資訊。
   *  @return 日。
   */
  public String getDay() {
    return day;
  }

  /** 取得小時。<p>
   * 必須透過 <u>setTime()</u> 才能取到有意義的資訊。
   *  @return 小時。
   */
  public String getHour() {
    return hour;
  }

  /** 取得分鐘。<p>
   * 必須透過 <u>setTime()</u> 才能取到有意義的資訊。
   *  @return 分鐘。
   */
  public String getMinute() {
    return minute;
  }

  /** 取得秒。<p>
   * 必須透過 <u>setTime()</u> 才能取到有意義的資訊。
   *  @return 秒。
   */
  public String getSecond() {
    return second;
  }

  private java.util.NoSuchElementException formatException() {
    StringBuffer msg = new StringBuffer();
    msg.append("\n\n <font color='red'><b>");
    msg.append(" Please check your string format ... ");
    msg.append(" 您輸入的格式有誤，請確定有明顯的分隔字元，並且可以切割成三個元件 ... ");
    msg.append(" </b></font>\n");
    return new java.util.NoSuchElementException(msg.toString());
  }

  /*
   public static void main(String[] args) {
    DateParser me = new DateParser();
    System.out.println();
    System.out.println(me.format(17, 5, 0, ":"));
//		me.setDate("","");
   }
//*/

} // end class
